package com.ssn.jse.serializable;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

class ObjectYouWannaSave implements Serializable
{   
    private static final long serialVersionUID = 3224332633725166982L;
    //所有实现Serializable接口的类都需要增加　serialVersionUID
    int   x;
    int   y;     
    SubObject   so   =   new   SubObject();        
}

class SubObject implements Serializable
{
    private static final long serialVersionUID = 4224332633725166867L;
    String   s   =   "abc";   //String   is   OK,   because   String   is   java.io.Serializable   
}

class Save
{   //   in   Save.java   
    public void  main(String[] args)  
    {   
      ObjectYouWannaSave   original   =   new   ObjectYouWannaSave();   
      original.x = -1;   
      original.y = 100;                
      ObjectOutputStream   out   =   null;   
      try
      {                       
          out   =   new   ObjectOutputStream(new   FileOutputStream(new   File("c:/save.dat")));   
          out.writeObject(original);  //将　对象写入持久
      }
      catch(Exception e)
      {  
        System.out.println("将实例写入文件出错："+e.toString());
      }
      finally
     {   
          try{out.close();}catch(Exception   e){}   
     }
   }   
}
class Read
{   //   in   Read.java   
    public void main(String[] args)
    {
       ObjectInputStream   in   =   null;   
       try{   
           in = new ObjectInputStream(new FileInputStream(new  File("c:/save.dat")));   
           ObjectYouWannaSave   o   =   (ObjectYouWannaSave)in.readObject();   
           System.out.println("x="+o.x);
           System.out.println("y="+o.y);
           System.out.println("subobject.string=" + o.so.s);   
          }catch(Exception e){   
          }finally{   
              try{in.close();}catch(Exception e){}   
          }   
    }   
} 
public class TT
{

    /**
     * 程序入口
     * 2007-01-19 19:43
     */
    public static void main(String[] args) {
    
    //    Save ss = new Save();
    //    ss.main(args);
        Read rr = new Read();
        rr.main(args);//  这是个最简单的例子，先运行Save,以后什么时候运行Read都可以（只要c:\save.dat文件还存在就可以了）  
    }
}
/**
 *     对象的寿命通常随着生成该对象的程序终止而终止，有时候，可能需要将对象的状态保存下来，
 *  在需要的时候再将对象恢复，我们把对象的这种记录自己状态的以便将来再生的能力，叫做对象
 *  的持续性（PERSISTENCE），对象通过写出描述自己状态的数值来记录自己，这个过程叫对象
 *  的串行化Serializable。串行化的主要任务是写出对象实例变量的值。如果变量是另一个对象
 *  的引用，则引用的对象也要串行化，这是个递归过程。
*/